#ifndef PANEL_MAIN_WINDOW_H
#define PANEL_MAIN_WINDOW_H

#include <QMainWindow>
#include <QButtonGroup>
#include "state_info.h"
#include "overview_view.h"
#include "alarm_view.h"
#include "data_view.h"
#include "config_view.h"
#include "yk_comparison.h"
#include "zmq.hpp"
#include "dealer_handler.h"
#include <vector>
#include "ui_panel_main_window.h"

namespace Ui
{
    class PanelMainWindow;
}

/**
 * @brief 告警面板主窗口
 */
class PanelMainWindow : public QMainWindow
{
    Q_OBJECT

public:
    /**
     * @brief 构造函数
     *
     * @param parent 父窗口
     */
    explicit PanelMainWindow(QWidget *parent = nullptr);

    /**
     * @brief 析构函数
     */
    ~PanelMainWindow();

protected:
    void showEvent(QShowEvent *event) override;

private slots:
    /**
     * @brief 点击总览按钮
     */
    void onBtnOverviewClicked();

    /**
     * @brief 点击告警按钮
     */
    void onBtnAlarmClicked();

    /**
     * @brief 点击数据按钮
     */
    void onBtnDataClicked();

    /**
     * @brief 点击配置按钮
     */
    void onBtnConfigClicked();

    /**
     * @brief 点击遥测对比按钮
     */
    void onBtnYKComparisonClicked();

    // 网络相关槽函数
    void onNetworkMessageReceived(const QString &method, const QString &body);
    void onNetworkStatusChanged(bool connected);
    void onNetworkError(const QString &error_message);

private:
    /**
     * @brief 初始化视图
     */
    void initViews();

    /**
     * @brief 初始化网络
     */
    void initNetwork();

    /**
     * @brief 设置连接
     */
    void setupConnections();

    void switchView(QWidget *view);

    Ui::PanelMainWindow *ui_;
    /**
     * @brief 总览视图
     */
    OverviewView *overview_view_;
    /**
     * @brief 告警视图
     */
    AlarmView *alarm_view_;
    /**
     * @brief 数据视图
     */
    DataView *data_view_;
    /**
     * @brief 配置视图
     */
    ConfigView *config_view_;

    /**
     * @brief 遥测对比视图
     */
    YKComparison *yk_comparison_view_;

    /**
     * @brief 主站信息
     */
    StateInfo *state_info_;

    /**
     * @brief 子站信息列表
     */
    std::vector<StateInfo *> state_info_vec_;

    // 网络相关成员
    DealerHandler *dealer_handler_;
    QThread *dealer_thread_;

    // 搜索树形控件
    SearchTreeWidget *search_tree_;
};

#endif // PANEL_MAIN_WINDOW_H
